package com.zshan.clinic.common.util.validate;

import java.util.regex.Pattern;

/**
 * 批准文号格式校验工具类（支持药品、保健品、化妆品等）
 */
public class ApprovalNumberUtil {

    // 药品类：国药准字H20012345、国药试字Z20051234
    private static final Pattern DRUG_APPROVAL_PATTERN =
            Pattern.compile("^国药(准字|试字)[HZSJB]{1}\\d{8}$");

    // 卫食健字(2002)第0001号、卫妆准字29-XK-1234号、卫消字(2001)第1234号 等
    private static final Pattern OTHER_APPROVAL_PATTERN =
            Pattern.compile("^(卫(食健|妆准|消)字)(\\(?\\d{4}\\)?)[第]?(\\d{3,6})号$|^卫妆准字\\d{2}-XK-\\d{4}号$");

    /**
     * 判断是否是药品类文号（国药准字/试字）
     */
    public static boolean isDrugApprovalNumber(String number) {
        return number != null && DRUG_APPROVAL_PATTERN.matcher(number).matches();
    }

    /**
     * 判断是否是其他类文号（卫食健字、卫妆准字、卫消字等）
     */
    public static boolean isOtherApprovalNumber(String number) {
        return number != null && OTHER_APPROVAL_PATTERN.matcher(number).matches();
    }

    /**
     * 判断是否是合法的文号（综合所有支持格式）
     */
    public static boolean isValidApprovalNumber(String number) {
        return isDrugApprovalNumber(number) || isOtherApprovalNumber(number);
    }

    // 示例
    public static void main(String[] args) {
        System.out.println(isValidApprovalNumber("国药准字H20012345"));     // ✅ true
        System.out.println(isValidApprovalNumber("国药试字Z20051234"));     // ✅ true
        System.out.println(isValidApprovalNumber("卫食健字(2002)第0001号")); // ✅ true
        System.out.println(isValidApprovalNumber("卫妆准字29-XK-1234号"));   // ✅ true
        System.out.println(isValidApprovalNumber("卫消字(2001)第1234号"));   // ✅ true
        System.out.println(isValidApprovalNumber("假药准字X00000000"));     // ❌ false
    }
}
